/**
 * 在这个挑战中，你将从头开始重新实现 React 的一小部分！这并不像听起来那么难。
 * 滚动 sandbox 进行预览。请注意，它显示了 四个测试用例 。它们与你之前在本页上看到过的示例相对应。
 * 你的任务是实现 getFinalState 函数，让它为每种情况返回正确的结果。如果你对它进行了正确的实现的话，那么所有四个测试用例都应该会通过。
 * 你将收到两个参数：
 *     baseState 是初始状态（例如：0），queue 是一个既包含数字（例如：5）也包含更新函数（例如：n => n + 1）的数组，
 *     这些数字和数组会被按照它们被添加进来的顺序排列。
 * 你的任务是返回最终的 state，如同页面上的表格展示的那样！
 */
export function getFinalState(baseState, queue) {
  let finalState = baseState
  if (Array.isArray(queue) && queue.length > 0) {
    // const isFunction = (item) => {
    //   return typeof item == 'function'
    // }
    // const allUpdateFunc = queue.every((i) => isFunction(i))
    // if (allUpdateFunc) {
    //   queue.forEach((item) => {
    //     finalState += item(baseState)
    //   })
    // } else {
    //   const lastItem = queue[queue.length - 1]
    //   const lastItemIsFunction = isFunction(lastItem)
    //   if (lastItemIsFunction) {
    //     queue.forEach((item) => {
    //       if (isFunction(item)) {
    //         finalState += item(baseState)
    //       } else {
    //         finalState += item
    //       }
    //     })
    //   } else {
    //     finalState = lastItem
    //   }
    // }
    for (let update of queue) {
      if (typeof update === 'function') {
        // 调用更新函数
        finalState = update(finalState)
      } else {
        // 替换下一个 state
        finalState = update
      }
    }
  }

  return finalState
}
